#include "searchdock.h"

SearchDock::SearchDock(const QString &title, QWidget *parent) : QDockWidget(title, parent)
{
    setFeatures(QDockWidget::NoDockWidgetFeatures | QDockWidget::DockWidgetClosable);

    container = new QTableWidget;
    container->resize(500, container->height());

    container->setColumnCount(2); // Le tableau contenant les résultats a deux colonnes (N° ligne, ligne)
    container->setEditTriggers(QAbstractItemView::NoEditTriggers); // On ne modifie pas le contenu
    container->setSelectionBehavior(QAbstractItemView::SelectRows); // On sélectionne toute la ligne
    container->setShowGrid(false); // masque les bords

    setWidget(container);

    connect(container, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(sendTableSignal(QTableWidgetItem*)));

    container->horizontalHeader()->hide();
}

SearchDock::~SearchDock()
{
    delete container;
}

void SearchDock::refresh(QMap<int, QString> &_results, QString &_input)
{
    QMapIterator<int, QString> i(_results);
    QString htmlInput("<strong>"+_input+"</strong>");
    int nbRow;

    container->clear();
    container->setRowCount(0);

    while(i.hasNext())
    {
        i.next();

        // Création d'une nouvelle ligne
        nbRow = container->rowCount();
        container->insertRow(nbRow);

        // Création de ses cellules
        QTableWidgetItem *cel0 = new QTableWidgetItem(QString::number(i.key()));
        container->setItem(nbRow, 0, cel0);

        QTableWidgetItem *cel1 = new QTableWidgetItem();
        // TODO : Réussir à ajouter un signal "doubleClicked" au Label.
        // TODO : PUIS, utiliser un QSignalMapper pour mapper le signal
        QLabel* scriptLine = new QLabel(QString(i.value()).replace(_input, htmlInput, Qt::CaseInsensitive));
        container->setItem(nbRow, 1, cel1);
        container->setCellWidget(nbRow, 1, scriptLine);
    }

    container->resizeColumnsToContents();
}


// Si on double clic sur la cellule de la deuxième colonne,
// _item est la cellule contenant la ligne de code du script
// Si on double clic sur la cellule de la première colonne
// _item est la cellule contenant le numéro de la ligne
void SearchDock::sendTableSignal(QTableWidgetItem* _item)
{
    // "0" pour la première colonne (numéro de ligne)
    QString lineCellText = container->item(container->row(_item), 0)->text();
    emit resultDoubleClicked(lineCellText.toInt());
}
